home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / amos / eaissu3b.lha / Source_Code / UN_Snowflake_Genarator.AMOS / UN_Snowflake_Genarator.amosSourceCode
AMOS Source Code  |  1995-12-30  |  4KB  |  196 lines

  1. Set Buffer 70
  2. Rem
  3. Rem    Please Note 
  4. Rem
  5. Rem    At present the save option performs one more cycle
  6. Rem    before saving. It saves the pattern of pixels on or 
  7. Rem    off, so when you reload it the colours will no doubt  
  8. Rem    be different, but the basic design will be the same.
  9. Rem
  10. Screen Open 1,340,260,16,LORES
  11. HOWBIG=100
  12. Dim CELL(HOWBIG+1,HOWBIG+1)
  13. Wind Open 1,0,0,40,30,1
  14. Palette ,,,,$0,$0,$FF0,$F0F,$FF,$888,$F00,$F0,$F,$0,$0
  15. Curs Off 
  16. Pen 0
  17. Paper 2
  18. Title Top " Amiga Snowflakes "
  19. Menu$(1)="CONTROLS"
  20. Menu$(1,4)="INITIALIZE"
  21. Menu$(1,5)="CHANGE SIZE"
  22. Menu$(1,6)="LOAD"
  23. Menu$(1,7)="SAVE"
  24. Menu$(1,8)="QUIT"
  25. On Menu Gosub MENUINT
  26. Menu On 
  27. On Menu On 
  28. SIZE=64
  29. FACTOR=20
  30. NEWSIZE:
  31. SIZE1=SIZE+1
  32. INITIALIZE:
  33. Clw 
  34. Menu$(1,1)="START"
  35. Menu$(1,2)="        "
  36. Menu$(1,3)="STEP"
  37. Locate 30,1
  38. Print "SIZE:"
  39. Locate 30,2
  40. Print SIZE;"  "
  41. Locate 30,4
  42. Print "GEN: "
  43. Locate 30,7
  44. Print "AREA:"
  45. H=SIZE/2
  46. GENERATION=0
  47. For X=1 To H
  48.    For Y=X To 1 Step -1
  49.       CELL(X,Y)=0
  50.       CELL(X,X)=7
  51.    Next Y
  52. Next X
  53. RNMODE=0
  54. MAINLOOP:
  55. Menu On 
  56. Ink 0
  57. Bar FACTOR,FACTOR To SIZE+2,SIZE+2
  58. Locate 30,5
  59. Print GENERATION;"  "
  60. DENSITY=-128
  61. For X=1 To H
  62.    For Y=X To 1 Step -1
  63.       STORE=0
  64.       C=CELL(X,Y)
  65.       If X=Y or(C>4 and C<8)
  66.          STORE=1
  67.          Ink Rnd(11)+4
  68.          DENSITY=DENSITY+8
  69.          XF=X+FACTOR
  70.          YF=Y+FACTOR
  71.          SIZEF=SIZE1+FACTOR
  72.          Plot XF,YF
  73.          Plot SIZEF-XF,YF
  74.          Plot XF,SIZEF-YF
  75.          Plot SIZEF-XF,SIZEF-YF
  76.          Plot YF,XF
  77.          Plot SIZEF-YF,XF
  78.          Plot YF,SIZEF-XF
  79.          Plot SIZEF-YF,SIZEF-XF
  80.       End If 
  81.       CELL(X,Y)=STORE
  82.    Next Y
  83. Next X
  84. Locate 30,8
  85. Print DENSITY;"  "
  86. CHECKMENU:
  87. While((RNMODE=0) or(MKEY<>0))
  88.    If MENUHIT=1
  89.       Goto EXECUTE
  90.    End If 
  91.    Menu On 
  92.    On Menu On 
  93. Wend 
  94. GENERATE:
  95. GENERATION=GENERATION+1
  96. For X=1 To H
  97.    For Y=X To 1 Step -1
  98.       If(CELL(X,Y) and 1)<>0
  99.          CELL(X-1,Y-1)=CELL(X-1,Y-1)+2
  100.          CELL(X,Y-1)=CELL(X,Y-1)+2
  101.          CELL(X+1,Y-1)=CELL(X+1,Y-1)+2
  102.          CELL(X-1,Y)=CELL(X-1,Y)+2
  103.          CELL(X+1,Y)=CELL(X+1,Y)+2
  104.          CELL(X-1,Y+1)=CELL(X-1,Y+1)+2
  105.          CELL(X,Y+1)=CELL(X,Y+1)+2
  106.          CELL(X+1,Y+1)=CELL(X+1,Y+1)+2
  107.          If X=H
  108.             CELL(X,Y-1)=CELL(X,Y-1)+2
  109.             CELL(X,Y)=CELL(X,Y)+2
  110.             CELL(X,Y+1)=CELL(X,Y+1)+2
  111.          End If 
  112.       End If 
  113.    Next Y
  114. Next X
  115. For X=2 To H-1
  116.    If(CELL(X,X-1) and 1)<>0 Then CELL(X,X-1)=CELL(X,X-1)+2
  117. Next X
  118. For X=1 To H
  119.    CELL(0,X)=0
  120.    CELL(X-1,X+1)=0
  121.    CELL(X,0)=0
  122. Next X
  123. Goto MAINLOOP
  124. EXECUTE:
  125. Menu Off 
  126. MENUHIT=0
  127. On MNUCAT Goto STRTMODE,STPMODE,GENERATE,INITIALIZE,CHANGESIZE,LODER,SAVR,QUIT
  128. STRTMODE:
  129. RNMODE=1
  130. MKEY=0
  131. Menu$(1,1)="RUNNING"
  132. Menu$(1,2)="STOP"
  133. Menu$(1,3)="        "
  134. Goto GENERATE
  135. STPMODE:
  136. RNMODE=0
  137. Menu$(1,1)="START"
  138. Menu$(1,2)="        "
  139. Menu$(1,3)="STEP"
  140. Goto CHECKMENU
  141. QUIT:
  142. End 
  143. CHANGESIZE:
  144. Clw 
  145. Print "INPUT THE NEW LENGTH/WIDTH OF"
  146. Print "CELL ARRAY.  USE ONLY EVEN NUMBERS."
  147. Input "";SIZE
  148. SIZE=SIZE and 254
  149. Curs Off 
  150. If SIZE>(HOWBIG*2) Then Goto CHANGESIZE
  151. Goto NEWSIZE
  152. LODER:
  153. FILE$=Fsel$("Screens/*.flk","","Load Data From")
  154. Open In 1,FILE$
  155. Input #1,SIZE
  156. Input #1,GENERATION
  157. H=SIZE/2
  158. SIZE1=SIZE+1
  159. For X=1 To H
  160.    For Y=X To 1 Step -1
  161.       Input #1,CELL(X,Y)
  162.       If CELL(X,Y)=1
  163.          CELL(X,Y)=7
  164.       End If 
  165.    Next Y
  166. Next X
  167. Close 1
  168. Locate 30,2
  169. Print SIZE
  170. RNMODE=0
  171. Menu$(1,1)="START"
  172. Menu$(1,2)="        "
  173. Menu$(1,3)="STEP"
  174. Goto MAINLOOP
  175. SAVR:
  176. FILE$=Fsel$("Screens/*.flk","","Save Data as")
  177. FILE$=Lower$(FILE$)
  178. If Right$(FILE$,4)<>".flk"
  179.    FILE$=FILE$+".flk"
  180. End If 
  181. Open Out 1,FILE$
  182. Print #1,SIZE
  183. Print #1,GENERATION
  184. For X=1 To H
  185.    For Y=X To 1 Step -1
  186.       Print #1,CELL(X,Y)
  187.    Next Y
  188. Next X
  189. Close 1
  190. Goto GENERATE
  191. MENUINT:
  192. MENUHIT=Choice(1)
  193. MNUCAT=Choice(2)
  194. MKEY=2
  195. On Menu On 
  196. Return